//
//  ViewController.m
//  OpenSSLDemo
//
//  Created by Andney Jack on 2021/2/22.
//

#import "ViewController.h"
#import <CTOpenSSL/CTRSAUtil.h>
#import <CTOpenSSL/CTAesUtil.h>

#define kAesPrivateKey @""
#define kAesInitVector @""

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

//    [self test_RSA];
    [self test_AES];
}

- (void)test_AES
{
    NSString *src = @"RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有";

    NSData *data = [src dataUsingEncoding:NSUTF8StringEncoding];

    NSString *encode = [CTAesUtil aesEncode:data key:kAesPrivateKey initVector:kAesInitVector ];
    NSLog(@"加密: \n%@", encode);

    NSString *decode = [CTAesUtil aesDecodeToString:encode key:kAesPrivateKey initVector:kAesInitVector];
    NSLog(@"解密: \n%@", decode);
}

- (void)test_RSA
{
    NSString *privateKey = @"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCFSf3Hn9w+GAe1RQnuzwdeHtBjhEgcLbM4UAK2QtRUvko3+nD3Eu06FtuJpMsDdf1+S+YxWd2CiRXJ6d/c/k3KXDAykBMYdwN785lujW76qcfzV2Er462WoK5rXYrHn8FxwCHw+X7bqoqEYSsezFnqUljyUrWhjclL2UyLe3f1tF306jfKZtr/UE/FpR7VaLJTVOq+iMlVUyfy3YaZgKu9KPX8B1M4ZOsNGZA57i0lfHWpwiecu/K1gTMQJhXPjmVyEgdoRBVksGUE7jRlkfid9UvAJV4nj7fVsDVOxEa9ipOsG/u5STk5/qrwrkTm0QO7CTHyOD/XUUN2DAvGMASpAgMBAAECggEAeaQ3KRGpjDmd/z6MfBcQoEL653d338+NOh06/F8tLFGlpkS3B6WMPnFR1eJBLF1oBPT7lZpv34uACQ+ZsDOdhspvahW2d6NV2K9OHWiSGc0Mn/Xkxos4hrkJtQ5fcyNHBarUzvjDX3HajEmpcqgIfyK77hqxjEi7pq8ffkQmDGNCghqV+D8kkECMVrRmhqjGEQ3QbKCgus3n3r8vAX4wbVtdSZfDo7KNuIRstuk9FVSqg/qF23FVMJZt2ooFUuA051Kq/5MpcxQdPSibyIoRZ95MIWPY3i4d1CqqiH/cGdErLJ8JDIVPl3Da5lcoCSOkjz97WpTXD3XHh2U6FjBLIQKBgQDdkwTsNtQVZpKOCICjJByCUFPPWUKdoSFz4SVn+cMLnxKVlfQiGbn1VA4MI1ugeSywoCGeZOOr7nhPhkOHieWQuG+BLh8yJSJF2Y//yLV/TJI9I10FRLpc85AC1RxgQqqr1SrdeenQ+4qLsRV2QgRhdPlfA6t6B3Qy+OsgTaQpDQKBgQCZ/3rsQJv87OTo45EyDRXtqRYBWlRQuL7e6VOYbXf8kn5BN65yg+t9rwmGURVRnugykwJZKyUEo800GvfHFXu8SX6yj4RFtZ00MmwlfXZQVuAd18Ft5K2icFaYhO2jwLJcHfMoLfe/kwmTzWIc6Rzwz9m6WsL4a4XjorbZfxfrDQKBgQC2rHH/iQh7CFDFVo8vcSMr8KvYI9/+8wwQbEuZmFnMp/37Y2CeCJW+g+j86t2sxJoqmCp/WvA1HGsGLUxZXz/re5M6blr7zY+fBMpqd//ijq92RkR3hn0bCxbsruQxHGV3O0yWwd8aE3fayUlHcRAJhRXe1ri155VOPNgkjr5LtQKBgGusnUcY+bhD7t4DV58WVTHCGvfBL9jtA9Aadm/Kgq2fxBVXmGrLYFmVjGRUx0I1iIbsESVFrHFtEmqPPJX/qG+DN8oj3Mlc7dj0NHeWHKaZx8Q1+jIbRWihgXrM3tezQUJ1UnHSijpx1a15WlN6jti1i7foBBDsJUZ/m7fBTHj1AoGANIFOhjCmlidIBqYTkHShDJ5AeJjvExjgF5IAoDN7bhYeA1+rE4T6VDHl+25GgxCRSG+kUKr1K680YSOZj7KTeSIHLC1du4WXOgc4/IoUe94MVqxRCkTCd8fko9AgWZBLV6eGL/KC/IIVUFiygwyprFtckBA7wvXK8gg6N00emJc=";
    NSString *publicKey = @"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhUn9x5/cPhgHtUUJ7s8HXh7QY4RIHC2zOFACtkLUVL5KN/pw9xLtOhbbiaTLA3X9fkvmMVndgokVyenf3P5NylwwMpATGHcDe/OZbo1u+qnH81dhK+OtlqCua12Kx5/BccAh8Pl+26qKhGErHsxZ6lJY8lK1oY3JS9lMi3t39bRd9Oo3ymba/1BPxaUe1WiyU1TqvojJVVMn8t2GmYCrvSj1/AdTOGTrDRmQOe4tJXx1qcInnLvytYEzECYVz45lchIHaEQVZLBlBO40ZZH4nfVLwCVeJ4+31bA1TsRGvYqTrBv7uUk5Of6q8K5E5tEDuwkx8jg/11FDdgwLxjAEqQIDAQAB";
    NSString *src = @"RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。RSA加密是一种非对称加密。可以在不直接传递密钥的情况下，完成解密。这能够确保信息的安全性，避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程，分别称为公钥和私钥。两者之间有数学相关，该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥，公钥是公开的（可能同时多人持有）。";

    CTRSAUtil *util = [[CTRSAUtil alloc] initWithRSA2:YES];
    [util importKey:publicKey keyType:RSAKeyTypePublic];
    [util importKey:privateKey keyType:RSAKeyTypePrivate];

//    NSString *sign = [util signString:src keyType:RSAKeyTypePrivate urlEncoding:YES];
//    NSLog(@"-----sign: \n%@", sign);
//    return;
//
//    NSLog(@"验证：%d", [util verifyString:src withSign:sign keyType:RSAKeyTypePublic]);

    NSLog(@"原始文本: \n%@\n\n", src);

//    NSString *encode = [util encode:src keyType:RSAKeyTypePublic urlEncoding:YES];
//    NSLog(@"公钥加密: \n%@", encode);
//    NSLog(@"私钥解密: \n%@\n\n\n\n", [util decode:encode keyType:RSAKeyTypePrivate urlDecoding:YES]);
//
//    NSString *encode2 = [util encode:src keyType:RSAKeyTypePrivate urlEncoding:YES];
//    NSLog(@"私钥加密: \n%@", encode2);
//    NSLog(@"公钥解密: \n%@", [util decode:encode2 keyType:RSAKeyTypePublic urlDecoding:YES]);

    NSString *encode = [util encodeLongText:src keyType:RSAKeyTypePublic urlEncoding:YES];
    NSLog(@"公钥加密: \n%@", encode);
    NSLog(@"私钥解密: \n%@\n\n\n\n", [util decodeLongText:encode keyType:RSAKeyTypePrivate urlDecoding:YES]);

    NSString *encode2 = [util encodeLongText:src keyType:RSAKeyTypePrivate urlEncoding:YES];
    NSLog(@"私钥加密: \n%@", encode2);
    NSLog(@"公钥解密: \n%@", [util decodeLongText:encode2 keyType:RSAKeyTypePublic urlDecoding:YES]);
}

@end
